package com.example.thirdannotation.y2024.config;

import com.example.thirdannotation.y2024.bean.Car;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * bean的生命周期：
 *      bean创建--初始化--销毁的过程
 *      1. 指定初始化和销毁的方法
 *      2. 通过让bean实现 InitializingBean (定义初始化逻辑)， 通过实现 DisposableBean 定义销毁接口
 *      3. 可以使用JSR250规范：
 *          3.1 @PostConstructor: 在bean创建完成并且属性赋值完成；来执行初始化方法
 *          3.2 @PreDestroy: 在容器销毁bean之前，通知我们进行清理工作
 *      4. BeanPostProcessor: bean的后置处理器，在bean初始化前后进行一些处理工作
 *          4.1 postProcessBeforeInitialization 在初始化之前工作
 *          4.2 postProcessAfterInitialization 在初始化之后工作
 */
@ComponentScan("com.example.thirdannotation.y2024")
@Configuration
public class ConfigOfLifeCycle {

    @Bean(initMethod = "init", destroyMethod = "destroy")
    public Car car(){
        return new Car();
    }
}
